/*
 * @Description: 
 * @Author: liutq
 * @Date: 2021-03-10 22:50:46
 * @LastEditTime: 2021-03-10 23:00:24
 * @LastEditors: liutq
 * @Reference: 
 */
// 创建对象
var targetObj = {
    name: '小李'
}
var targetObj2 = {
    name: '小李'
}
/**
 * @description: 定义值改变时的处理函数（ 观察者）
 * @param  {*}
 * @return {*}
 * @param {*} oldVal
 * @param {*} newVal
 */
function observer(oldVal, newVal) {
    // 其他处理逻辑...
    targetObj2.name = newVal
    console.info('targetObj2的name属性的值改变为 ' + newVal);
}

// 定义name属性及其set和get方法（name属性为被观察者）
const proxy = Object.defineProperty(targetObj, 'name', {
    enumerable: true,
    configurable: true,
    get: function () {
        return name;
    },
    set: function (val) {
        //调用处理函数
        observer(name, val)
        name = val
    }
});

targetObj.name = '张三';
targetObj.name = '李四';
console.log(targetObj2.name)
console.log(proxy.name = "小费")
console.log(proxy)